Перейти к основному содержимому
Версия: 2.0

MISP

Интеграция с Malware Information Sharing Platform (MISP)

Данное руководство описывает настройку интеграции Solar TI Feeds Agent с MISP. Интеграция обеспечивает автоматическую загрузку индикаторов компрометации (IoC) из Solar TI Feeds в MISP через промежуточное хранение в локальной базе данных.


Предварительные требования

  • Установленный и настроенный Solar TI Feeds Agent
  • Учётные данные для доступа к API MISP (токен аутентификации)
  • Доступ к серверу Solar TI Feeds с действительным JWT-токеном

Конфигурация интеграции

Интеграция реализована двумя пайплайнами, которые обеспечивают надёжное получение, промежуточное хранение и доставку индикаторов в MISP, включая повторную обработку неудачных попыток. Аутентификация в MISP выполняется через HTTP-заголовок Authorization с токеном.

Основные компоненты интеграции:

КомпонентНазначение
FeedsAPIGeneratorЗагрузка данных из Solar TI Feeds API
FeedsDBSinkСохранение данных в локальную SQLite-базу
FeedsDBGeneratorЧтение данных из базы для обработки
FeedsDBFailedGeneratorПовторная обработка ошибочных записей
MispSinkОтправка полученных индикаторов напрямую в API MISP (без дополнительных преобразований)

Переменные окружения

Для работы интеграции необходимо определить следующие переменные окружения (например, в docker-compose.yml):

ПеременнаяНазначение
TIC_AGENT_MISP_ADDRESSПолный URL сервера MISP (например, https://misp.example.com)
TIC_AGENT_MISP_TOKENТокен аутентификации для API MISP
TIC_AGENT_MISP_USERИмя пользователя для Basic-аутентификации (опционально)
TIC_AGENT_MISP_PASSWORDПароль для Basic-аутентификации (опционально)
TIC_AGENT_MISP_PROXYСтрока подключения к прокси-серверу для MISP (например, socks5://user:password@proxy.domain:port)

Дополнительные параметры (расписание, путь к БД и пр.) задаются в файле internal/templates.pkl.


Структура пайплайнов для MISP

Pipeline 1: feeds-api (загрузка данных)

КомпонентПараметрыОписание
FeedsAPIGeneratorserver = templates.TICApiCfg; schedule = значение из TIC_AGENT_API_POOL_INTERVAL (по умолчанию 3600 с); filter = с полем fields = "all" и пагинацией с limit из TIC_AGENT_API_BATCH_SIZE (по умолчанию 1000)Запрос индикаторов из Solar TI Feeds API с настройкой полей и пагинации
FeedsDBSinkСохранение всех полученных данных в SQLite

Pipeline 2: misp (обработка и выгрузка)

КомпонентПараметрыОписание
FeedsDBGeneratorschedule = из TIC_AGENT_DB_POOL_INTERVAL (по умолчанию 600 с); delay = из TIC_AGENT_DB_START_DELAY (по умолчанию 60 с); batchSize = из TIC_AGENT_DB_BATCH_SIZE (по умолчанию 100); batchDelay = из TIC_AGENT_DB_BATCH_DELAY (по умолчанию 100 мс)Чтение индикаторов из БД с настраиваемыми параметрами пакетной обработки
FeedsDBFailedGeneratorfeedGenName = "misp-feeds-db-generator"Повторная обработка индикаторов, отправка которых ранее завершилась ошибкой (наследует расписание и задержки от основного генератора)
MispSinkserver с адресом (TIC_AGENT_MISP_ADDRESS), токеном (заголовок Authorization), опциональным прокси (TIC_AGENT_MISP_PROXY)Отправка подготовленных событий напрямую в API MISP (без промежуточных трансформаций)

Условия повторной обработки:
Индикаторы, не отправленные из-за ошибок, автоматически помечаются в БД и подхватываются FeedsDBFailedGenerator для повторной попытки с теми же интервалами, что и основной генератор.


Справочник параметров для MispSink

Параметры ServerCfg (подключение к MISP)

ПараметрТип данныхОбязательностьОписаниеПример
credentialsHeaderAuthДаАутентификация через заголовок. name = "Authorization", value содержит токен.credentials = new HeaderAuth { name = "Authorization" value = read("env:TIC_AGENT_MISP_TOKEN") }
addressStringДаПолный URL API MISPaddress = read("env:TIC_AGENT_MISP_ADDRESS")
insecureSkipVerifyBooleanНетОтключение проверки SSL-сертификатаinsecureSkipVerify = true
proxyStringНетСтрока подключения к прокси-серверу для MISPproxy = read?("env:TIC_AGENT_MISP_PROXY")

Параметры MispSink

ПараметрТип данныхОбязательностьОписание
serverServerCfgДаКонфигурация подключения к MISP (адрес и токен)
customTagsListing<String>НетСписок кастомных тегов, добавляемых ко всем отправляемым событиям

Полный пример конфигурационного файла для интеграции с MISP

📄 Нажмите, чтобы показать/скрыть misp_pipeline.pkl
amends "package://pkg.pkl-lang.org/github.com/pipelane/pipelaner/pipelaner@1.3.1#/Pipelaner.pkl"
import "package://pkg.pkl-lang.org/github.com/pipelane/pipelaner/pipelaner@1.3.1#/source/Components.pkl"
import "../pkl/internal/agent.pkl"
import "../pkl/internal/templates.pkl"

pipelines {
new Components.Pipeline {
name = "feeds-api"
inputs {
new agent.FeedsAPIGenerator {
name = "feeds-api-generator"
server = templates.TICApiCfg
schedule = (read?("env:TIC_AGENT_API_POOL_INTERVAL") ?? 3600).toInt().s
filter = new agent.FeedsAPIRequestParams {
fields = new Listing {
"all"
}
pagination = new agent.Pagination {
limit = (read?("env:TIC_AGENT_API_BATCH_SIZE") ?? 1000).toInt()
}
}
}
}
sinks {
new agent.FeedsDBSink {
name = "feeds-db-sink"
inputs {
"feeds-api-generator"
}
}
}
}

new Components.Pipeline {
name = "misp"
inputs {
new agent.FeedsDBGenerator {
name = "misp-feeds-db-generator"
schedule = (read?("env:TIC_AGENT_DB_POOL_INTERVAL") ?? 600).toInt().s
delay = (read?("env:TIC_AGENT_DB_START_DELAY") ?? 60).toInt().s
batchSize = (read?("env:TIC_AGENT_DB_BATCH_SIZE") ?? 100).toInt()
batchDelay = (read?("env:TIC_AGENT_DB_BATCH_DELAY") ?? 100).toInt().ms
}
new agent.FeedsDBFailedGenerator {
name = "misp-feeds-db-failed-generator"
feedGenName = "misp-feeds-db-generator"
}
}
sinks {
new agent.MispSink {
name = "misp-sink"
inputs {
"misp-feeds-db-generator"
"misp-feeds-db-failed-generator"
}
server = new agent.ServerCfg {
credentials = new agent.HeaderAuth {
name = "Authorization"
value = read("env:TIC_AGENT_MISP_TOKEN")
}
address = read("env:TIC_AGENT_MISP_ADDRESS")
proxy = read?("env:TIC_AGENT_MISP_PROXY")
}
}
}
}
}

settings = templates.baseSettings

Мониторинг результатов работы интеграции

После запуска агента убедитесь в корректности работы:

ПроверкаДействие
Проверка состояния БДУбедитесь, что SQLite-база наполняется индикаторами, а успешно отправленные записи помечаются соответствующим образом.
Анализ логовПроверьте логи агента (в директории, заданной шаблонами) на наличие ошибок подключения к MISP или Feeds API.
Верификация в MISPВ интерфейсе MISP должны появляться новые события с индикаторами.
Контроль очереди повторовПри временных сбоях индикаторы автоматически повторно отправляются через 1 минуту. Убедитесь, что после восстановления связи они доставляются.

Примечание: Логи агента также можно просмотреть в реальном времени с помощью команды docker logs {CONTAINER_NAME}.